/**
 * 
 */
package org.stars.daostars;

import java.io.Serializable;

/**
 * Rappresenta un operatore utilizzato per la definizione dei vincoli.
 * <pre>
 * <code>
 * &lt;condition property="a" operator="isNotNull" propertyValue="ciao" value="mandi"/&gt;
 * </code>
 * </pre>
 * Gli attributi del tag xml vengono così mappati:
 * <ul>
 * <li><b>operator</b>: diventa la chiave dell'operatore, ovvero la stringa che identifica
 * 	all'interno della definizione di tutti i dao questa operazione. Nell'esempio sarebbe <code>isNotNull</code>.
 * Essa viene gestita case insensitive.
 * <li><b>property</b>: viene mappato sull'argomento property</li>
 * <li><b>propertyValue</b>(OPZIONALE): viene mappato sull'argomento propertyValue. </li>
 * <li><b>value</b>(OPZIONALE): viene mappato sull'argomento value.</li>
 * </ul>
 * La chiave 
 * 
 * @author Francesco Benincasa (908099)
 *
 */
public interface ConstraintOperator extends Serializable {
		
	/**
	 * Metodo per implementa l'operazione. Dato un xml d'esempio:
	 * <code>
	 * &lt;condition property="a" operator="isNotNull" propertyValue="ciao" value="mandi"/&gt;
	 * </code>
	 * </pre>
	 * Gli attributi del tag xml vengono cosi' mappati:
	 * <ul>
	 * <li><b>operator</b>: diventa la chiave dell'operatore, ovvero la stringa che identifica
	 * 	all'interno della definizione di tutti i dao questa operazione. Nell'esempio sarebbe <code>isNotNull</code>.
	 * Essa viene gestita case insensitive.
	 * <li><b>property</b>: viene mappato sull'argomento property</li>
	 * <li><b>propertyValue</b>(OPZIONALE): viene mappato sull'argomento propertyValue. </li>
	 * <li><b>value</b>(OPZIONALE): viene mappato sull'argomento value.</li>
	 * </ul>
	 * 
	 * @param property
	 * 			proprieta' e' oggetto della condizione
	 * @param propertyValue
	 * 			seconda proprieta'
	 * @param value
	 * 			valore da utilizzare. 
	 * @return
	 * 			<code>true</code> se la condizione e' verificata.
	 */
	public boolean execute(Object property, Object propertyValue, String value);	
}
